// modules
const MemberLevelModule = require('../models/tableModels/memberLevelModule')
const userModule = require('../models/tableModels/userModule')

// methods
const response = require('../utils/methods/response.js')
const jsonFormat = require('../utils/methods/jsonFormat')

// 会员等级控制器
const memberLevelController = {
    // 获取会员等级列表
    memberLevelList: async (req, res) => {
        try {
            // 查询会员等级列表
            const list = await MemberLevelModule.knexAll()
            response.success(res, list.length ? { list } : null)
        } catch(err) {
            response.error(res, err)
        }
    },
    // 新增会员等级
    addMemberLevel: async ({ body }, res) => {
        try {
            // 格式化参数
            const params = jsonFormat(body)
            // 判断是否是首次添加
            if (Number(params.isDefault) === 1) {
                // 首次添加设置 levelType 为 1
                params.levelType = 1
            } else {
                // 非首次添加，获取上一个会员等级 levelType + 1
                const memberLevelList = await MemberLevelModule.knexAll()
                params.levelType = memberLevelList[memberLevelList.length - 1].levelType + 1
            }
            // 添加等级
            const addRes = await MemberLevelModule.insert(params)
            if (addRes) response.success(res, {})
        } catch(err) {
            response.error(res, err)
        }
    },
    // 修改会员等级
    updateMemberLevel: async ({ body }, res) => {
        try {
            // 格式化参数
            const params = jsonFormat(body)
            // 更新会员等级数据
            const updateResult = await MemberLevelModule.update({ id: params.id }, params)
            if (updateResult) {
                response.success(res, {})
            } else {
                response.fail(res, '修改失败')
            }
        } catch(err) {
            response.error(res, err)
        }
    },
    // 删除会员等级
    deleteMemberLevel: async ({ query }, res) => {
        try {
            // 获取当前等级的类型
            const { levelType } = (await MemberLevelModule.selectLevelType(query.id))[0]
            // 判断会员表的 memberLevel 字段中是否存在当前 levelType
            const isExistLevel = (await userModule.selectLevelCount(levelType))[0]['count(*)']
            // 如果当前等级有会员
            if (isExistLevel) {
                response.fail(res, '当前等级存在会员，不能删除！')
            } else {
                // 删除会员等级数据
                const deleteResult = await MemberLevelModule.delete({ id: query.id })
                if (deleteResult) response.success(res)
            }
        } catch(err) {
            response.error(res, err)
        }
    }
}

module.exports = memberLevelController
